/**
打印输入中多次出现的行的个数和文本
它从stdin或指定的文件列表读取
2018/7/24
wgg
*/
//包名使用非main出现错误
//一个子文件夹下的所有包名应保持一致
package main

import (
	"os"
	"bufio"
	"fmt"
)

func main() {
	dup2()
}

func dup2(){
	counts := make(map[string]int)
	files := os.Args[1:]//读取屏幕输入
	if len(files) == 0 {
		countLines(os.Stdin,counts)//读取屏幕当前输入内容
	}else {
		for _,arg := range files{
			f,err := os.Open(arg)
			if err != nil {
				fmt.Fprintf(os.Stdin,"dup2:%v\n",err)
			}
			countLines(f,counts)
			f.Close()
		}
	}
	for line,n := range counts {
		if n > 1 {
			fmt.Printf("%d\t%s\n",n,line)
		}
	}
}

func countLines(f *os.File,counts map[string]int)  {
	input := bufio.NewScanner(f)
	//控制循环退出，Text()获取读取到的内容
	for input.Scan(){
		if input.Text() == "end" { break }
		counts[input.Text()]++
	}
}
